from django.contrib import admin

from .models import BookInfo, HeroInfo
# Register your models here.

# 关联信息展示(设置关联类---1)
# class HeroInfoStackInline(admin.TabularInline):  # 以表格的形式嵌入
class HeroInfoStackInline(admin.StackedInline):  # 以块的形式嵌入。
    """关联展示信息"""

    model = HeroInfo  # 要关联展示的模型(反向关联)
    extra = 1  # 设置额外的编辑框 数量



# 书模型管理类   ==> 继承 admin.ModelAdmin
class BookInfoAdmin(admin.ModelAdmin):
    """BookInfo模型管理类: 管理它在admin站点上的显示信息"""
    list_per_page = 4  # 每页显示多少条数据
    actions_on_bottom = True  # 添加底部动作选项
    actions_on_top = False  # 头部功能选项

    # 控制列表页面展示的那些列  里面的参数可以是字段,可以是方法
    list_display = ['id', 'btitle', 'bpub_date', "bpub_date_format", 'bread', "bread_company" , 'bcomment', 'is_delete']

    # 控制书籍列表按什么字段排序 --> 列表
    ordering = ["id"]  # 默认升序, 降序在字段前加-  ["-id"]

    """详情页面设置"""
    # 控制列表界面所展示的字段,不写是默认全部展示
    # fields = ['btitle', 'bpub_date', 'is_delete']

    # fields和fieldsets只能存在一个,否则报错
    # 分组显示
    fieldsets = [
        ["基础", {"fields": ['btitle', 'bpub_date', 'is_delete', "image"]}],
        # 第一个参数是标题, 第二个参数是显示字段以字典格式
        ['高级', {'fields': ['bread', 'bcomment'], 'classes': ['collapse']}]  # 'classes': ['collapse'] 为CSS样式 折叠
    ]

    # 关联绑定(使用关联类------2)
    inlines = [HeroInfoStackInline] # 在图书的编辑界面到当前这本书关联的英雄都展示出来


@admin.register(HeroInfo)
class HeroInfoAdmin(admin.ModelAdmin):
    """控制HeroInfo"""
    # 控制列表页面展示的那些列  里面的参数可以是字段,可以是方法
    list_display = ['id', 'hname', 'hcomment', 'hbook', 'is_delete', "hbook_read"]

    # 过滤数据 --> 列表  可以过滤多条数据
    list_filter = ["hbook"]

    # 搜索框(搜索范围 = 列表 )  注意点: 如果在点击过滤数据,则搜索会在过滤好的数据中搜索
    search_fields = ["hname"]


# 注册管理后台,使得能够显示出来    后者控制前者
admin.site.register(BookInfo, BookInfoAdmin)  # 在admin站点中注册模型
# admin.site.register(HeroInfo, HeroInfoAdmin)  # 在admin站点中注册模型


# 页面头部
admin.site.site_header = "小辉辉书城"
# 标题
admin.site.site_title = '小辉辉书城MIS'
admin.site.index_title = '欢迎使用小辉辉书城MIS'